28. 安全
如果添加了Spring Security的依赖,那么web应用默认对所有的HTTP路径(也称为终点,端点,表示API的具体网址)使用'basic'认证。为了给web应用添加方法级别(method-level)的保护,你可以添加@EnableGlobalMethodSecurity
并使用想要的设置,其他信息参考Spring Security Reference。
默认的AuthenticationManager
只有一个用户('user'的用户名和随机密码会在应用启动时以INFO日志级别打印出来),如下:
Using default security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35
注 如果你对日志配置进行微调,确保org.springframework.boot.autoconfigure.security
类别记录日志级别为INFO
,否则默认的密码不会打印出来。
你可以通过设置security.user.password
改变默认密码,这些和其他有用的属性通过SecurityProperties(以"security"为前缀的属性)被外部化了。
默认的安全配置是通过SecurityAutoConfiguration
,SpringBootWebSecurityConfiguration
(用于web安全),AuthenticationManagerConfiguration
(可用于非web应用的认证配置)进行管理的。你可以添加一个@EnableWebSecurity
bean来彻底关掉Spring Boot的默认配置。为了对它进行自定义,你需要使用外部的属性配置和WebSecurityConfigurerAdapter
类型的beans(比如,添加基于表单的登陆)。
想要关闭认证管理的配置,你可以添加一个AuthenticationManager
类型的bean,或在@Configuration
类的某个方法里注入AuthenticationManagerBuilder
来配置全局的AuthenticationManager
。这里有一些安全相关的Spring Boot应用示例可以拿来参考。
在web应用中你能得到的开箱即用的基本特性如下:
- 一个使用内存存储的
AuthenticationManager
bean和一个用户(查看SecurityProperties.User
获取user的属性)。 - 忽略(不保护)常见的静态资源路径(
/css/**, /js/**, /images/**
,/webjars/**
和**/favicon.ico
)。 - 对其他所有路径实施HTTP Basic安全保护。
- 安全相关的事件会发布到Spring的
ApplicationEventPublisher
(成功和失败的认证,拒绝访问)。 - Spring Security提供的常见底层特性(HSTS, XSS, CSRF, 缓存)默认都被开启。
上述所有特性都能通过外部配置(security.*
)打开,关闭,或修改。想要覆盖访问规则而不改变其他自动配置的特性,你可以添加一个注解@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
的WebSecurityConfigurerAdapter
类型的@Bean
。
注 WebSecurityConfigurerAdapter
默认会匹配所有路径,如果不想完全覆盖Spring Boot自动配置的访问规则,你可以精确的配置想要覆盖的路径。